---
title: Troubleshooting
description: Fixing common issues with Expo Router setup.
---

import { Terminal } from '~/ui/components/Snippet';

## `EXPO_ROUTER_APP_ROOT` not defined

If `process.env.EXPO_ROUTER_APP_ROOT` is not defined you'll see the following error:

<Terminal
  cmd={[
    '$ Invalid call at line 11: process.env.EXPO_ROUTER_APP_ROOT First argument of require.context should be a string.',
  ]}
/>

This can happen when the Babel plugin `expo-router/babel` is not used in the project **babel.config.js**. You can try clearing the cache with:

<Terminal cmd={['$ npx expo start --clear']} />

Alternatively, you can circumvent this issue by creating an **index.js** file in the root of your project with the following contents:

```jsx index.js
import { registerRootComponent } from 'expo';
import { ExpoRoot } from 'expo-router';

// Must be exported or Fast Refresh won't update the context
export function App() {
  const ctx = require.context('./app');
  return <ExpoRoot context={ctx} />;
}

registerRootComponent(App);
```

> Do not use this to change the root directory (**app**) as it won't account for usage in any other places.

## `require.context` not enabled

This can happen when using a custom version of `@expo/metro-config` that does not enable context modules. Expo Router requires the project **metro.config.js** to use `expo-router/metro` as the default configuration. Delete the **metro.config.js**, or extend `expo/metro-config`. See [Customizing metro](/guides/customizing-metro/) for more information.
